package com.study.springboot.common.mvc;

import com.study.springboot.common.constant.BaseRespStatus;
import com.study.springboot.common.constant.ErrorRespStatusEnum;
import com.study.springboot.common.constant.SuccessRespStatusEnum;
import com.study.springboot.common.util.WebUtil;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 控制器基类
 *
 * @author wei.zhao
 * @date 2021年11月30日 11:26
 */
public class BaseController {

    /**
     * 获取当前HttpServletRequest
     */
    public final HttpServletRequest getCurRequest() {
        return WebUtil.getCurRequest();
    }

    /**
     * 获取当前HttpServletResponse
     */
    public final HttpServletResponse getCurResponse() {
        return WebUtil.getCurResponse();
    }

    /**
     * 获取当前客户端token
     */
    public final String getCurToken() {
        return WebUtil.getCurToken();
    }

    /**
     * 获取当前用户ID
     */
    public final Long getCurUserId() {
        return WebUtil.getCurUserId();
    }

    /**
     * 默认成功，无数据
     */
    public final <T> RespData<T> success() {
        return WebUtil.callback(SuccessRespStatusEnum.SUCCESS);
    }

    /**
     * 默认成功，有数据
     */
    public final <T> RespData<T> success(T data) {
        return WebUtil.callback(SuccessRespStatusEnum.SUCCESS, data);
    }

    /**
     * 默认失败，系统错误
     */
    public final <T> RespData<T> failure() {
        return WebUtil.callback(ErrorRespStatusEnum.SERVICE_ERROR);
    }

    /**
     * 自定义失败错误
     */
    public final <T> RespData<T> failure(BaseRespStatus baseRespStatus) {
        return WebUtil.callback(baseRespStatus);
    }

    /**
     * 自定义响应
     */
    public final <T> RespData<T> callback(Integer code, String message, T data) {
        return WebUtil.callback(code, message, data);
    }

}
